home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
oper_sys
/
emerald
/
emrldsys.lha
/
Language
/
Compiler
/
trace.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-08-16
|
3KB
|
161 lines
/*
* @(#)trace.c 1.7 1/20/89
*/
#include "types.h"
#include "flags.h"
#include "assert.h"
#include "trace.h"
int traceenvironment,
traceemit,
traceemitmove,
traceallocate,
tracehelp,
traceimports,
traceatctsort,
traceassign,
tracetempstack,
tracetempreg,
tracepasses,
tracekernel,
tracemanifest,
traceconform,
traceconformfailure,
tracehandler,
tracegraph,
tracematchat,
tracedoto,
tracebuiltins,
tracelocals,
traceknowct,
traceknowmanifest,
traceknowlocal,
tracegenerate,
traceinvoccache,
tracedelay = 1,
tracecopy,
traceprimitive,
tracelinenumber,
tracetypecheck,
tracedebuginfo;
typedef struct {
char *name;
int *flag;
} flagTable, *flagTablePtr;
flagTable table [] = {
"environment", &traceenvironment,
"emit", &traceemit,
"emitmove", &traceemitmove,
"allocate", &traceallocate,
"help", &tracehelp,
"imports", &traceimports,
"atctsort", &traceatctsort,
"assign", &traceassign,
"tempstack", &tracetempstack,
"tempreg", &tracetempreg,
"passes", &tracepasses,
"kernel", &tracekernel,
"manifest", &tracemanifest,
"conform", &traceconform,
"conformfailure", &traceconformfailure,
"handler", &tracehandler,
"graph", &tracegraph,
"matchat", &tracematchat,
"doto", &tracedoto,
"builtins", &tracebuiltins,
"locals", &tracelocals,
"knowct", &traceknowct,
"knowmanifest", &traceknowmanifest,
"knowlocal", &traceknowlocal,
"generate", &tracegenerate,
"invoccache", &traceinvoccache,
"delay", &tracedelay,
"copy", &tracecopy,
"primitive", &traceprimitive,
"linenumber", &tracelinenumber,
"typecheck", &tracetypecheck,
"debuginfo", &tracedebuginfo,
NULL, 0
};
void toLower(s)
register char *s;
{
register char c;
while (c = *s) {
if (c >= 'A' && c <= 'Z') *s += ('a' - 'A');
s++;
}
}
char *find(s, c)
register char *s, c;
{
register char theC;
while ((theC = *s) && theC != c) s++;
return(theC == c ? s : NULL);
}
parseTraceFlag(f)
register char *f;
{
char *comma, *equals;
register flagTablePtr tp;
int value;
assert(*f == '-'); f++;
assert(*f == 'T'); f++;
toLower(f);
while (f && *f) {
comma = find(f, ',');
if (comma != NULL) *comma = '\0';
equals = find(f, '=');
if (equals == NULL) {
value = 1;
} else {
value = atoi(equals+1);
if (value <= 0) value = 1;
*equals = '\0';
}
for (tp = &table[0]; tp->name; tp++) {
if (!strcmp(f, tp->name)) {
*tp->flag = value;
break;
}
}
if (tp->name == NULL) {
fprintf(stdout, "Unknown trace name \"%s\"\n", f);
return(0);
}
f = (comma == NULL ? NULL : comma + 1);
}
return(1);
}
void initializeTrace()
{
register flagTablePtr tp;
IFTRACE(help, 1) {
fprintf(stdout, "Trace\t\tValue\n");
for (tp = &table[0]; tp->name; tp++) {
fprintf(stdout, "\"%s\" -->\t%d\n", tp->name, *tp->flag);
}
}
if (traceconform > 0) traceconform = 0x10000000;
if (traceconformfailure > 0) traceconformfailure = 0x10000000;
}
/*VARARGS2*/
void trace(level, format, args)
int level;
char *format;
int args;
{
while (--level > 0) putc(' ', stdout);
_doprnt(format, &args, stdout);
putc('\n', stdout);
}